/**
 * 为了赋值的审核
 */
void main() {
  SortedCollection coll = SortedCollection(sort);

  // 虽然知道 compare 是函数，
  // 但是函数是什么类型 ？
  assert(coll.compare is Function);

  print(carcar is Car);
}

class SortedCollection {
  Function compare;
  SortedCollection(int f(Object a, Object b)) {
    // 当把 f 赋值给 compare 的时候，类型信息丢失了
    // compare 得到的类型是 Function
    compare = f;
  }
}

// Initial, broken implementation. // broken ？
int sort(Object a, Object b) => 0;

typedef Car = String Function(String car);

String carcar(String name) {
  return name;
}
